﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Schüleranmeldung.Database;
using System.Reflection;

namespace Schüleranmeldung
{
    public partial class FormDetails : Form
    {
        public SchuelerErzAdr SchuelerErzAdr { get; set; }
        public Schueler Schueler { get; set; }
        public K_AllgAdresse K_AllgAdresse { get; set; }
        public Schueler_AllgAdr Schueler_AllgAdr { get; set; }
        public K_Schule K_Schule { get; set; }
        public AllgAdrAnsprechpartner AllgAdrAnsprechpartner { get; set; }
        public EigeneSchule_Schulformen EigeneSchule_Schulformen { get; set; }
        List<string[]> AbschlusseList = new List<string[]>();        
        ListView SchuelerListe = null;
        int index;        
        public FormDetails(ref ListView _SchuelerListe, int _index)
        {
            InitializeComponent();
            SchuelerListe = _SchuelerListe;
            index = _index;

            Schueler = new Schueler();
            SchuelerErzAdr = new SchuelerErzAdr();
            K_AllgAdresse = new K_AllgAdresse();
            Schueler_AllgAdr = new Schueler_AllgAdr();
            K_Schule = new K_Schule();
            AllgAdrAnsprechpartner = new AllgAdrAnsprechpartner();
            EigeneSchule_Schulformen = new EigeneSchule_Schulformen();            
        }
        
        private void FormDetails_Load(object sender, EventArgs e)
        {            
            Text = "Deatailansicht (" + Schueler.Vorname + " " + Schueler.Name + ")";
            dateTimePicker1.MaxDate = Schueler.Geburtsdatum.Value;
            dateTimePickerEntlassArt.MinDate = Schueler.LSSchulentlassDatum.Value;
            txt_Entlasung_Klasse.Text = Schueler.LSJahrgang;
            foreach(Database.Schueler_AllgAdr AllgAdr in AppBackend.Instance.SchildDB.Schueler_AllgAdr.Where(o=>o.Schueler_ID == Schueler.ID))
            {
                dateTimePickerAufnahme.MaxDate = AllgAdr.Vertragsbeginn.Value;
                dateTimePickerEnde.MaxDate = AllgAdr.Vertragsende.Value;
            }
            //eMail XML ?! falscher Bezeichner ?
            FillComboBox(cmbKonfession, AppBackend.Instance.SchildDB.K_Religion, "Bezeichnung", "ID");            
            foreach (K_Religion KR in AppBackend.Instance.SchildDB.K_Religion.Where(s => s.Bezeichnung  == Schueler.ReligionAbk)) 
            {
                cmbKonfession.SelectedIndex = KR.ID - 1;
            }
            

            FillComboBox(cmbStaat, AppBackend.Instance.SchildDB.K_Staat, "Bezeichnung", "ID");            
            foreach(K_Staat KS in AppBackend.Instance.SchildDB.K_Staat.Where(s=>s.Bezeichnung == Schueler.StaatAbk))
            {
                cmbStaat.SelectedIndex = KS.ID - 1;
            }

            FillComboBox(cmbSchule, AppBackend.Instance.SchildDB.K_Schule, "Name", "ID");
            foreach (K_Schule Schule in AppBackend.Instance.SchildDB.K_Schule.Where(s => s.SchulNr == Schueler.LSSchulNr)) 
            {                
                cmbSchule.SelectedItem = Schule;
                LSOrt.Text = Schule.Ort;
                LSStrasse.Text = Schule.Strasse;
                LSPLZ.Text = Schule.PLZ;
                LSTelefon.Text = Schule.Telefon;
                Schulart.Text = Schule.SchulformBez;                 
            }

            if (Schueler.LSSchulNr == null)
            {
                if (Schueler.LSName != null)
                {
                    K_Schule s = AppBackend.Instance.SchildDB.K_Schule.Where(schule => schule.Name == Schueler.LSName).First();
                    Schueler.Schule = s;
                }
            }
            else
            {
                K_Schule s = AppBackend.Instance.SchildDB.K_Schule.Where(schule => schule.SchulNr == Schueler.LSSchulNr).First();
                Schueler.Schule = s;
            }
            if (Schueler.Schule != null)
            {                
                Schueler.LSName = Schueler.Schule.Name;
                Schueler.LSStrasse = Schueler.Schule.Strasse;
                Schueler.LSPLZ = Schueler.Schule.PLZ;
                Schueler.LSOrt = Schueler.Schule.Ort;
                FillComboBox(cmbSchule, AppBackend.Instance.SchildDB.K_Schule, "Name", "ID", Schueler.Schule.ID);
            }

            //LSAbschlussArt
            //List<string[]> AbschlusseList = new List<string[]>();
            int i = 0;
            AbschlusseList = AppBackend.Instance.getAlleAbschlusse();
            foreach (string[] row in AbschlusseList.ToList()) 
            {
                cmbAbschlussArt.Items.Add(row[1]);
                if (AbschlusseList[i][0] == Schueler.LSEntlassArt)
                {
                    cmbAbschlussArt.SelectedIndex = i;
                }
                i++;
            }
            //string item = AbschlusseList[5][0];
            //cmbAbschlussArt.SelectedItem = item;
            //cmbAbschlussArt.SelectedIndex = 0;

            if (AbschlusseList[5][0] == Schueler.LSAbschlussArt)
            {
                cmbAbschlussArt.SelectedIndex = 5;
            }
            /*
            for(int i = 0;i<AbschlusseList.Count;i++)
            {
                if (AbschlusseList[i][0] == Schueler.LSAbschlussArt)
                {
                    cmbAbschlussArt.SelectedIndex = i;
                }
            }
            */

            /*
            FillComboBox(cmbAbschlussArt, AppBackend.Instance.SchildDB.EigeneSchule_Schulformen, "Schulform", "SGL");            
            foreach (EigeneSchule_Schulformen Schulformen in AppBackend.Instance.SchildDB.EigeneSchule_Schulformen.Where(s => s.SGL == Schueler.ASDSchulform))
            {
                cmbAbschlussArt.SelectedItem = Schulformen;               
            }
            */

            
            if(Schueler.Aussiedler == "+")/*?*/
                rdbSpaetaussiedlerJa.Checked = true;
            if (Schueler.Aussiedler == "-") 
                rdbSpaetaussiedlerNein.Checked = true;


            Erziehungberechtige();           
            FillControlsSchuelerErzAdr(this.tabEltern);
            AusbilungsBetrieb();
            FillControlsK_AllgAdresse(this.tabAusbildung);
            FillControls(this.tabSchueler, Schueler);
            Ansprechpartner();
            FillControlsAllgAdrAnsprechpartner(this.tabPageAusbildung2);
            txt_Fachrichtung.Text = Schueler.Beruf;
            txt_Ausbildungsberuf.Text = "KA";            
            ToopTip();
        }



        //Übergibt die Wert aus der Datenbank den neu erstellten Datenbank-Objketen
        public void Erziehungberechtige()
        {
            foreach (SchuelerErzAdr EA in AppBackend.Instance.SchildDB.SchuelerErzAdr.Where(s => s.Schueler_ID == Schueler.ID))
            {
                SchuelerErzAdr = EA;
            }                        
        }
       
        public void AusbilungsBetrieb()
        {            
            foreach( Schueler_AllgAdr SAA in AppBackend.Instance.SchildDB.Schueler_AllgAdr.Where(_saa => _saa.Schueler_ID == Schueler.ID))
            {
                Schueler_AllgAdr = SAA;
                foreach (K_AllgAdresse KAA in AppBackend.Instance.SchildDB.K_AllgAdresse.Where(_kaa=>_kaa.ID == SAA.Adresse_ID))
                {
                    K_AllgAdresse = KAA;                   
                }
            }           
        }
        public void Ansprechpartner()
        {
            foreach (Schueler_AllgAdr SAA in AppBackend.Instance.SchildDB.Schueler_AllgAdr.Where(_saa => _saa.Schueler_ID == Schueler.ID))
            {
                Schueler_AllgAdr = SAA;
                foreach (AllgAdrAnsprechpartner AAAP in AppBackend.Instance.SchildDB.AllgAdrAnsprechpartner.Where(o => o.ID == SAA.Ansprechpartner_ID))
                {
                    AllgAdrAnsprechpartner = AAAP;                    
                }
            }        
        }
        //ende 

                
        

       

        //Übergibt mit Hilfe der Reflection die Datenbank-Wert der Forms
        public void FillControls(Control startControl, object obj)
        {
            foreach (Control control in startControl.Controls)
            {
                FillControls(control, obj);
            }
            if (startControl.Tag is string)
            {
                Type t = obj.GetType();
                PropertyInfo pi = t.GetProperty((string)startControl.Tag);
                if (pi != null)
                {
                    object value = pi.GetValue(obj, null);
                    if (value != null)
                    {
                        startControl.Text = value.ToString();
                    }
                }
            }
        }       
       
        public void FillControlsSchuelerErzAdr(Control startControl)
        {
            foreach (Control control in startControl.Controls)
            {
                FillControlsSchuelerErzAdr(control);
            }
            if (startControl.Tag is string)
            {
                Type t = SchuelerErzAdr.GetType();
                PropertyInfo pi = t.GetProperty((string)startControl.Tag);
                if (pi != null)
                {
                    object value = pi.GetValue(SchuelerErzAdr, null);
                    if (value != null)
                    {
                        startControl.Text = value.ToString();
                    }
                }
            }
        }
        public void FillControlsK_AllgAdresse(Control startControl)
        {
            foreach (Control control in startControl.Controls)
            {
                FillControlsK_AllgAdresse(control);
            }
            if (startControl.Tag is string)
            {
                Type t = K_AllgAdresse.GetType();
                PropertyInfo pi = t.GetProperty((string)startControl.Tag);
                if (pi != null)
                {
                    object value = pi.GetValue(K_AllgAdresse, null);
                    if (value != null)
                    {
                        startControl.Text = value.ToString();
                    }
                }
            }
        }

        public void FillControlsAllgAdrAnsprechpartner(Control startControl)
        {
            foreach (Control control in startControl.Controls)
            {
                FillControlsAllgAdrAnsprechpartner(control);
            }
            if (startControl.Tag is string)
            {
                Type t = AllgAdrAnsprechpartner.GetType();
                PropertyInfo pi = t.GetProperty((string)startControl.Tag);
                if (pi != null)
                {
                    object value = pi.GetValue(AllgAdrAnsprechpartner, null);
                    if (value != null)
                    {
                        startControl.Text = value.ToString();
                    }
                }
            }
        }
        //ende
        // Übergibt die Wert aus der Forms dem Datenbank-Objketen mti hilfe der Reflection
        public void SaveControlsSchueler(Control startControl)
        {
            foreach (Control control in startControl.Controls)
            {
                SaveControlsSchueler(control);
            }

            if (startControl.Tag is string)
            {
                Type tb = Schueler.GetType();
                PropertyInfo bpi = tb.GetProperty(startControl.Tag.ToString());
                if (bpi != null)
                {
                    if (bpi.PropertyType.Name == "Int32")
                        bpi.SetValue(Schueler, Convert.ToInt32(startControl.Text), null);
                    if (bpi.PropertyType.Name == "String")
                        bpi.SetValue(Schueler, startControl.Text.ToString(), null);
                }
            }
        }

        public void SaveControlsSchuelerErzAdr(Control startControl)
        {
            foreach (Control control in startControl.Controls)
            {
                SaveControlsSchuelerErzAdr(control);
            }

            if (startControl.Tag is string)
            {
                Type tb = SchuelerErzAdr.GetType();
                PropertyInfo bpi = tb.GetProperty(startControl.Tag.ToString());
                if (bpi != null)
                {
                    if (bpi.PropertyType.Name == "Int32")
                        bpi.SetValue(SchuelerErzAdr, Convert.ToInt32(startControl.Text), null);
                    if (bpi.PropertyType.Name == "String")
                        bpi.SetValue(SchuelerErzAdr, startControl.Text.ToString(), null);
                }
            }
        }

        public void SaveControlsK_AllgAdresse(Control startControl)
        {
            foreach (Control control in startControl.Controls)
            {
                SaveControlsK_AllgAdresse(control);
            }

            if (startControl.Tag is string)
            {
                Type tb = K_AllgAdresse.GetType();
                PropertyInfo bpi = tb.GetProperty(startControl.Tag.ToString());
                if (bpi != null)
                {
                    if (bpi.PropertyType.Name == "Int32")
                        bpi.SetValue(K_AllgAdresse, Convert.ToInt32(startControl.Text), null);
                    if (bpi.PropertyType.Name == "String")
                        bpi.SetValue(K_AllgAdresse, startControl.Text.ToString(), null);
                }
            }
        }

        public void SaveControlsSchueler_AllgAdr(Control startControl)
        {
            foreach (Control control in startControl.Controls)
            {
                SaveControlsSchueler_AllgAdr(control);
            }

            if (startControl.Tag is string)
            {
                Type tb = K_AllgAdresse.GetType();
                PropertyInfo bpi = tb.GetProperty(startControl.Tag.ToString());
                if (bpi != null)
                {
                    if (bpi.PropertyType.Name == "Int32")
                        bpi.SetValue(Schueler_AllgAdr, Convert.ToInt32(startControl.Text), null);
                    if (bpi.PropertyType.Name == "String")
                        bpi.SetValue(Schueler_AllgAdr, startControl.Text.ToString(), null);
                }
            }
        }

        public void SaveControlsAllgAdrAnsprechpartner(Control startControl)
        {
            foreach (Control control in startControl.Controls)
            {
                SaveControlsAllgAdrAnsprechpartner(control);
            }

            if (startControl.Tag is string)
            {
                Type tb = AllgAdrAnsprechpartner.GetType();
                PropertyInfo bpi = tb.GetProperty(startControl.Tag.ToString());
                if (bpi != null)
                {
                    if (bpi.PropertyType.Name == "Int32")
                        bpi.SetValue(AllgAdrAnsprechpartner, Convert.ToInt32(startControl.Text), null);
                    if (bpi.PropertyType.Name == "String")
                        bpi.SetValue(AllgAdrAnsprechpartner, startControl.Text.ToString(), null);
                }
            }
        }
        
        //saveende//

        private void FillComboBox(ComboBox target, object dataSource, String displayMember, String valueMember, object selectedValue = null)
        {
            target.DataSource = dataSource;
            target.DisplayMember = displayMember;
            target.ValueMember = valueMember;
            if (selectedValue != null)
            {
                target.SelectedValue = selectedValue;
            }
        }        

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }

        private void txt_Strasse_Load(object sender, EventArgs e)
        {

        }

        private void txtHausNr_Load(object sender, EventArgs e)
        {

        }

        private void boxStrasseEltern_Load(object sender, EventArgs e)
        {

        }

        private void txt_PLZ_Load(object sender, EventArgs e)
        {

        }

        private void txt_Ort_Load(object sender, EventArgs e)
        {

        }

        private void tabSchueler_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void txt_Telefon_Load(object sender, EventArgs e)
        {

        }

        private void txt_eMail_Load(object sender, EventArgs e)
        {

        }

        private void groupBox7_Enter(object sender, EventArgs e)
        {

        }

        private void resetTextBox3_Load(object sender, EventArgs e)
        {

        }

        private void resetTextBox8_Load(object sender, EventArgs e)
        {

        }

        private void boxElternOr_Load(object sender, EventArgs e)
        {

        }

        private void txt_von_Ausbildungszeit_Load(object sender, EventArgs e)
        {

        }

        private void btn_Abrechen_Tab1_Click(object sender, EventArgs e)
        {   
            Close();
        }

        private void rdbSpaetaussiedlerNein_CheckedChanged(object sender, EventArgs e)
        {
            Schueler.Aussiedler = "-";
        }

        private void rdbSpaetaussiedlerJa_CheckedChanged(object sender, EventArgs e)
        {
            Schueler.Aussiedler = "+";
        }

        private void btn_Sonderschule_CheckedChanged(object sender, EventArgs e)
        {
            Schueler.LSSchulform = "S".ToString();
        }

        private void btn_Hauptschule_CheckedChanged(object sender, EventArgs e)
        {
            Schueler.LSSchulform = "H".ToString();
        }

        private void btn_Realschule_CheckedChanged(object sender, EventArgs e)
        {
            Schueler.LSSchulform = "R".ToString();
        }

        private void btn_Geasmtschule_CheckedChanged(object sender, EventArgs e)
        {
            Schueler.LSSchulform = "GE".ToString();
        }

        private void btn_Gymnasium_CheckedChanged(object sender, EventArgs e)
        {
            Schueler.LSSchulform = "GY".ToString();
        }

        private void btn_Berufskolleg_CheckedChanged(object sender, EventArgs e)
        {
            Schueler.LSSchulform = "BK".ToString();
        }

        private void groupBox8_Enter(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void txt_Strasse_tab5_Load(object sender, EventArgs e)
        {

        }
        //Speichert die Daten ab
        private void btn_Speichern_tab1_Click(object sender, EventArgs e)
        {   
            SaveControlsSchueler(this.tabSchueler);
            SaveControlsSchuelerErzAdr(this.tabEltern);
            SaveControlsK_AllgAdresse(this.tabAusbildung);
            SaveControlsAllgAdrAnsprechpartner(this.tabPageAusbildung2);

            Database.K_Religion Religion = (K_Religion)cmbKonfession.SelectedItem;
            Schueler.ReligionAbk = Religion.Bezeichnung;
            Schueler.Religion_ID = Religion.ID;
            Database.K_Staat Staat = (K_Staat)cmbStaat.SelectedItem;
            Schueler.StaatAbk = Staat.Bezeichnung;
            Schueler.StaatKrz = Staat.StatistikKrz;
            Database.K_Schule Schule = (K_Schule)cmbSchule.SelectedItem;
            Schueler.LSSchulNr = Schule.SchulNr;
            Schueler.LSEntlassArt = AbschlusseList[(cmbAbschlussArt.SelectedIndex)][0];
            

            Schueler.Geburtsdatum = dateTimePicker1.Value.Date;
            Schueler_AllgAdr.Vertragsbeginn = dateTimePickerAufnahme.Value.Date;
            Schueler_AllgAdr.Vertragsende = dateTimePickerEnde.Value.Date;
            Schueler.LSSchulentlassDatum = dateTimePickerEntlassArt.Value.Date;
            Schueler.Beruf = txt_Fachrichtung.Text;
            Schueler.LSJahrgang = txt_Entlasung_Klasse.Text;

            SchuelerListe.Items.RemoveAt(index);
            ListViewItem item = new ListViewItem(new string[] { Schueler.SchuelerWebID, Schueler.Vorname + " " + Schueler.Name, Schueler.Strasse, Schueler.Bildungsgang, Schueler.Aufnahmedatum.ToString() });
            item.Tag = Schueler;
            SchuelerListe.Items.Insert(index, item);          
                 
            try
            {                
                AppBackend.Instance.SchildDB.SaveChanges();
            }
            catch (Exception ex2)
            {
                Console.Write("fehler{0}", ex2.InnerException);
            }
            Close();
        }

        private void VornameVater_Load(object sender, EventArgs e)
        {

        }

        private void VornameMutter_Load(object sender, EventArgs e)
        {

        }

        private void NachnameVater_Load(object sender, EventArgs e)
        {

        }

        private void txt_Telefon_Ausbildung_Load(object sender, EventArgs e)
        {

        }

        private void label6_Click(object sender, EventArgs e)
        {

        }

        private void boxEltern_Load(object sender, EventArgs e)
        {

        }

        private void FormDetails_FormClosed(object sender, FormClosedEventArgs e)
        {
            //FU.ladeBD();
        }

        private void cmbAbschlussArt_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void dateTimePickerAufnahme_ValueChanged(object sender, EventArgs e)
        {

        }

        private void txt_Telefax_Ausbildung_Load(object sender, EventArgs e)
        {

        }

        private void txt_Ausbildungsberuf_Load(object sender, EventArgs e)
        {

        }

        private void txt_Fachrichtung_Load(object sender, EventArgs e)
        {

        }

        private void txt_Ausbildungsleiter_Load(object sender, EventArgs e)
        {

        }

        private void txt_Ausbildungsbetreib_Load(object sender, EventArgs e)
        {

        }

        private void groupBox6_Enter(object sender, EventArgs e)
        {

        }

        private void txt_PLZ_Ausbildung_Load(object sender, EventArgs e)
        {

        }

        private void txt_Ort_Ausbildung_Load(object sender, EventArgs e)
        {

        }

        private void txt_Vorname_Load(object sender, EventArgs e)
        {

        }

        private void lbl_Schueler_ID_Click(object sender, EventArgs e)
        {

        }
        private void ToopTip()
        {
            ToolTip toolTip1 = new ToolTip();
            //toolTip1.ShowAlways = true;
            toolTip1.SetToolTip(btn_Abrechen_Tab1,"Schließ das Fenster ohne zu Speichern");
            toolTip1.SetToolTip(btn_Speichern_tab1, "Schließ das Fenster und speichert die Änderungen");
        }
        private void ChanceSchool() 
        {
            Database.K_Schule Schule = (K_Schule)cmbSchule.SelectedItem;
            LSOrt.Text = Schule.Ort;
            LSStrasse.Text = Schule.Strasse;
            LSPLZ.Text = Schule.PLZ;
            LSTelefon.Text = Schule.Telefon;
            Schulart.Text = Schule.SchulformBez; 

        }

        private void cmbSchule_SelectedIndexChanged(object sender, EventArgs e)
        {
            ChanceSchool();
        }

        private void LSOrt_Click(object sender, EventArgs e)
        {

        }
    }
}
